package pe.com.tma.dao.jpa;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.eclipse.persistence.internal.jpa.parsing.SubstringNode;

import pe.com.tma.bean.EstadoCuentaBean;
import pe.com.tma.dao.EstadoCuentaDAO;
import pe.com.tma.model.Movimientoctacliente;
import pe.com.tma.model.Usuario;
import pe.com.tma.util.BusquedaGrl;
import pe.com.tma.util.RtnGeneral;

public class JPAEstadoCuentaDAO extends GenericDAOJpa<Long, EstadoCuentaBean>  implements EstadoCuentaDAO {

	private EntityManager em = getEntityManager();
	private RtnGeneral rtn = null;
	
	@Override
	public List<Movimientoctacliente> obtenerEstadoCuenta(Usuario user) {
		// TODO Auto-generated method stub
		try {
			Query q = em.createQuery("SELECT c FROM Movimientoctacliente c Where c.usuario.idCliente = ?1 ");
			q.setParameter(1, user.getIdCliente());
			return q.getResultList();
			
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public List<Movimientoctacliente> obtenerEstadoCuenta(Usuario user,
			BusquedaGrl busc) {
		// TODO Auto-generated method stub
		try {
			
			Number mto;
			Timestamp fec = new Timestamp(busc.getFecDesde().getTime());
			List<Movimientoctacliente> rst = new ArrayList<Movimientoctacliente>();
			Query q = em.createQuery("SELECT SUM(c.montoMovimiento) FROM Movimientoctacliente c " +
					"Where c.usuario.idCliente = ?1 AND c.fechaVencimiento <= ?2 AND c.idMoneda = ?3");
			q.setParameter(1, user.getIdCliente());
			q.setParameter(2, fec);
			q.setParameter(3, busc.getIdInt());
			mto = (Number) q.getSingleResult();
			if(mto!=null){
				Movimientoctacliente movDesde = new Movimientoctacliente();
				movDesde.setFechaMovimiento(new Timestamp(fec.getTime()-1));
				movDesde.setFechaVencimiento(new Timestamp(fec.getTime()-1));
				movDesde.setDescripcion("Saldo de Movimientos al "+  fec.toLocaleString().substring(0,10) +" :");
				movDesde.setMontoMovimiento(mto);
				rst.add(movDesde);
			}
			
			q = em.createQuery("SELECT c FROM Movimientoctacliente c Where c.usuario.idCliente = ?1" +
					" AND c.fechaVencimiento > ?2 AND c.idMoneda = ?3");
			q.setParameter(1, user.getIdCliente());
			q.setParameter(2, fec);
			q.setParameter(3, busc.getIdInt());
			rst.addAll(q.getResultList());
			
			return rst;
			
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}
